/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DTO.PhieuDatTiec_DTO;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author PEKEM
 */
public class PhieuDatTiec_DAO {

    private static String sqlString;
    private static MSSQLConnect cn;
    private static ResultSet rs;

    public static ArrayList<PhieuDatTiec_DTO> layDSPhieuDatTiec() throws Exception {
        ArrayList<PhieuDatTiec_DTO> ds = new ArrayList();
        sqlString = "SELECT * FROM PHIEUDATTIEC";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                PhieuDatTiec_DTO pdt = new PhieuDatTiec_DTO();
                pdt.setMaPhieuDatTiec(rs.getString("MaPhieuDatTiec"));
                pdt.setMaKhach(rs.getString("MaKhach"));
                pdt.setTriGia(rs.getString("TriGia"));
                ds.add(pdt);
            }
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách mã dịch vụ");
        } finally {
            cn.Close();
        }
        return ds;
    }

    public static DefaultTableModel addTable(ResultSet rs) throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        ResultSetMetaData metaData = rs.getMetaData();
        int totalColumn = metaData.getColumnCount();
        Object[] dataRow = new Object[totalColumn];

        if (rs != null) {
            for (int i = 1; i <= totalColumn; i++) {
                table.addColumn(metaData.getColumnName(i));
            }
            while (rs.next()) {
                for (int i = 1; i <= totalColumn; i++) {
                    dataRow[i - 1] = rs.getObject(i);
                }
                table.addRow(dataRow);
            }

        }
        return table;

    }

    public static DefaultTableModel layBangPhieuDat() throws Exception {
        DefaultTableModel tb = new DefaultTableModel();
        sqlString = "SELECT MaPhieuDatTiec as [Mã Phiếu Đặt Tiệc], MaKhach as [Mã Khách], TriGia as [Trị Giá]  FROM PHIEUDATTIEC";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            tb = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách phieu dat");
        } finally {
            cn.Close();
        }
        return tb;
    }

    public static int Insert(PhieuDatTiec_DTO pdt) throws Exception {
        int n = 0;
        sqlString = "INSERT INTO PHIEUDATTIEC(MaPhieuDatTiec,MaKhach,TriGia, NgayDat) VALUES ('"
                + pdt.getMaPhieuDatTiec() + "','"
                + pdt.getMaKhach() + "','"
                + pdt.getTriGia() + "','"
                + pdt.getNgayDat() + "')";
        //Kết nối CSDL
        try {
            cn = new MSSQLConnect();
            n = cn.executeUpdate(sqlString);
        } catch (Exception e) {
            //throw new Exception("Lỗi cơ sở dữ liệu");
            System.out.println(e.toString());
        } finally {
            cn.Close();
        }
        return n;
    }

    public static int Delete(String maPhieuDatTiec) throws Exception {
        int n;
        sqlString = "DELETE FROM PHIEUDATTIEC WHERE MaPhieuDatTiec='" + maPhieuDatTiec + "'";
        try {
            cn = new MSSQLConnect();
            //Thực thi câu lệnh SQL
            n = cn.executeUpdate(sqlString);

        } catch (Exception e) {
            throw new Exception("Lỗi Kết Nối Cơ sở dữ liệu.");
        } finally {
            cn.Close();
        }
        return n;
    }

    public static int Update(PhieuDatTiec_DTO pdt) throws Exception {
        int n;
        sqlString = "UPDATE PHIEUDATTIEC SET MaKhach='" + pdt.getMaKhach()
                + "',TriGia'" + pdt.getTriGia() + "',NgayDat'" + pdt.getNgayDat()
                + "' WHERE MaPhieuDatTiec='" + pdt.getMaPhieuDatTiec() + "'";
        try {
            cn = new MSSQLConnect();
            //Thực thi câu lệnh SQL
            n = cn.executeUpdate(sqlString);

        } catch (Exception e) {
            throw new Exception("Lỗi Kết Nối Cơ sở dữ liệu.");
        } finally {
            cn.Close();
        }
        return n;
    }
    
    public static int DeleteCTPhieuDatTiec(String maPhieuDatTiec) throws Exception {
        int n;
        sqlString = "DELETE FROM CTPHIEUDATTIEC WHERE MaPhieuDatTiec='" + maPhieuDatTiec + "'";
        try {
            cn = new MSSQLConnect();
            //Thực thi câu lệnh SQL
            n = cn.executeUpdate(sqlString);

        } catch (Exception e) {
            throw new Exception("Lỗi Kết Nối Cơ sở dữ liệu.");
        } finally {
            cn.Close();
        }   
        return n;
    }
    
    public static String layMaCuoiCung() throws Exception {
        String kq;
        kq = null;
        sqlString = "SELECT TOP 1 MaPhieuDatTiec as [Mã Phiếu Đặt Tiệc] FROM PHIEUDATTIEC ORDER BY MaPhieuDatTiec DESC";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                kq = rs.getString("Mã Phiếu Đặt Tiệc");
            }

        } catch (Exception e) {
            throw new Exception("Không thể lấy mã max");
        } finally {
            cn.Close();
        }
        return kq;
    }

    public static String taoMaTuDong(String maGoc, int batDau) throws Exception {
        String str, kq;
        int so;
        try {
            str = maGoc.substring(batDau);
            kq = maGoc.substring(0, batDau);
            so = Integer.parseInt(str) + 1;
            for (int i = 0; i < str.length() - Integer.valueOf(so).toString().length(); i++) {
                kq += "0";
                //return kq;
            }
            kq = kq + so;
        } catch (Exception x) {
            return null;
        }
        return kq;
    }

    public static Float layTriGiaTheoMaKhach(String maKhach) throws Exception {
        Float trigia = 0f;
        sqlString = "SELECT SUM(TriGia) as [TG] FROM PhieuDatTiec where MaKhach= '" + maKhach + "'";

        try {
            cn = new MSSQLConnect();
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                trigia = rs.getFloat("TG");
            }
        } catch (Exception e) {
            throw new Exception("Không thể lấy trị giá phiếu đặc tiệc");

        } finally {
            cn.Close();
        }
        return trigia;
    }
}
